// 封装的是具体的接口的请求方法
// 注意：每个方法只负责一个url地址
import request from '@/utils/request.js' // 引入自定义axios函数

// 导出接口方法，为了在逻辑页面引入后调用
// eslint-disable-next-line no-unused-vars

// registerAPI(this.form)就相当于，registerAPI（{
  //  form: {
  //       username: '',
  //       password: '',
  //       repassword: ''
  //     },
// }）
// 正常传递时{username ：username，password：password，repassword：repassword}
// 在ES6语法中，key和value同名时，可以简写为一个key即为key也为value变量名
export const registerAPI = ({username, password, repassword }) => {
  // 原地是一个promise对象（内部包含原生ajax请求）
  // 要return这个promise对象到逻辑页面，去那边对promise对象提取结果
  return request({
    url: '/api/reg',
    method: 'POST',
    // axios传参有两个方式params和data
    // params的对象参数名和值，axios源码会把参数和值拼接在url？后面（一般这种方式是使用在query查询中）
    // data的对象参数和值，axios源码会把参数和值拼接在请求体中（body参数中）
    data: {
      // 这里根据ES6语法，也可以简写为一个
      // username: username,
      // password: password,
      // repassword: repassword
      username,
      password,
      repassword
    }
  })
}

// 登录接口
export const loginAPI=({username, password})=>{
  return request({
    url:'/api/login',
    method:'POST',
    data:{
      username,
      password

    }
  })
}

// 获取用户信息接口
// id username,nickname,email,user_pic
export const getUserInfoAPI=()=>{
  return request({
    url:'/my/userinfo',
    method:'GET'
    // 文档接口中说明传递的是一个请求头，所以就不能使用params和data
    // 这里需要token，token保存在vuex中
    // 怎样获取token呢：this.$store.token是可以，因为t在箭头函数中this指向的是箭头函数的父级作用域，即组件实例对象，而这里是js文件，所以不能使用
  })
}

// 获取侧边栏数据
 export const getMenusListAPI=()=>{
  return request({
    url:'/my/menus',
    method:'GET'
  })
 }

//  更新用户信息
export const updateUserInfoAPI=({ id,username,nickname,email,user_pic })=>{
  return request({
    url:'/my/userinfo',
    method:'PUT',
    data:{
      id,
      username,
      nickname,
       email,
       user_pic,
    }

  })
}

// 更新用户头像信息
export const updateUserAvatarAPI=(avatar)=>{
  return request({
    url:'/my/update/avatar',
    method:'PATCH',
    data:{
      avatar,  //头像base64字符串
    }

  })
}

// 更新用户密码
export const updateUserPwdAPI=({old_pwd,new_pwd,re_pwd})=>{
  return request({
    url:'/my/updatepwd',
    method:'PATCH',
    data:{
      old_pwd,  //旧密码
      new_pwd,  //新密码
      re_pwd,  //确认密码

    }
  })
}

// 获取文章分类列表
export const getAetCateListAPI=()=>{
  return request({
    url:'/my/cate/list',
    method:'GET',
  })
}

// 新增文章分类
export const addArtCateAPI=({cate_name,cate_alias})=>{
  return request({
    url:'/my/cate/add',
    method:'POST',
    data:{
      cate_name,
      cate_alias
    }
  })
}

// 修改文章分类
export const updateArtCateAPI=({id,cate_name,cate_alias})=>{
  return request({
    url:'/my/cate/info',
    method:'PUT',
    data:{
      id,
      cate_name,
      cate_alias
    }
  })
}

// 删除文章分类
export const delArtCateAPI=(id)=>{
  return request({
    url:'/my/cate/del',
    method:'DELETE',
    params:{
      id
    }
  })
}

// 发布文章
export const uploadArticleAPI=(fd)=>{
  return request({
    url:'/my/article/add',
    method:'POST',
     // data类型是一个普通对象{}，axios会把它转成JSON字符串在请求体里交给后台
    // 这个交口文档要求请求体里是一个FormData类型(表单数据对象)携带文件给后台，所以写成fd
    data:fd
   
  })
}


// 获取文章列表信息
export const getArticleListAPI=({pagenum,pagesize,cate_id,state})=>{
  return request({
    // 因为是查询传参数可以在url中写
    // url:`/my/article/list?page=${pagenum }&size=${ pagesize}`,
    url:'/my/article/list',
    method:'GET',
    params:{
      pagenum,
      pagesize,
      cate_id,
      state
    }
  })
}

// 获取文章详情
export const getArtDetailAPI=(id)=>{
  return request({
    url:'/my/article/info',
    method:'GET',
    params:{
      id
    }
  })
}

// 删除文章
export const delArticleAPI=(id)=>{
  return request({
    url:'/my/article/info',
    method:'DELETE',
    params:{
      id
    }
  })
}